package main

import (
	"fmt"
	"strconv"
)

/**
加一

给定一个表示 大整数 的整数数组 digits，其中 digits[i] 是整数的第 i 位数字。
这些数字按从左到右，从最高位到最低位排列。这个大整数不包含任何前导 0。
将大整数加 1，并返回结果的数字数组。

示例 1：
输入：digits = [1,2,3]
输出：[1,2,4]
解释：输入数组表示数字 123。
加 1 后得到 123 + 1 = 124。
因此，结果应该是 [1,2,4]。

示例 2：
输入：digits = [4,3,2,1]
输出：[4,3,2,2]
解释：输入数组表示数字 4321。
加 1 后得到 4321 + 1 = 4322。
因此，结果应该是 [4,3,2,2]。

示例 3：
输入：digits = [9]
输出：[1,0]
解释：输入数组表示数字 9。
加 1 得到了 9 + 1 = 10。
因此，结果应该是 [1,0]。
*/

func main() {
	inarr := [5]int{1, 2, 3, 4, 5}
	fmt.Println("输入：", inarr)
	var res int
	length := len(inarr)
	for i, v := range inarr {
		res = multSubres(v, length-i) + res
	}
	fmt.Println("结果：", res)
	res++
	resList := make([]int, 0, 10)

	//除法实现
	resStr := strconv.Itoa(res)
	length = len(resStr)
	for i, _ := range resStr {
		val, res1 := divSubres(res, length-i)
		resList = append(resList, val)
		res = res1
	}

	//字符串实现
	//resStr := strconv.Itoa(res)
	//fmt.Println(resStr)
	//for _, v := range resStr {
	//	intv, _ := strconv.Atoi(string(v))
	//	fmt.Println(intv)
	//	resList = append(resList, intv)
	//}

	fmt.Println(resList)
}

func divSubres(res int, t int) (result int, remainder int) {
	divisor := 1
	for j := 1; j < t; j++ {
		divisor = divisor * 10
	}
	return res / divisor, res % divisor
}

func multSubres(i, t int) int {
	subres := i
	for j := 1; j < t; j++ {
		subres = subres * 10
	}
	//fmt.Println(subres)
	return subres
}
